﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Security;

namespace ADECMS.UserPages
{
    public partial class AdminPanel : System.Web.UI.Page
    {
        ADECMSDBDataContext cmsdb;
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                cmsdb = new ADECMSDBDataContext();
            }
            catch (Exception ex)
            {
                Response.Write(ex.Message);
            }
            HttpCookie loginCookie = Request.Cookies["AuthCookie"];
            if (Request.IsAuthenticated)
            {
                FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(loginCookie.Value);

                var useri = from k in cmsdb.USERs
                            from p in cmsdb.USER_TYPEs
                            where k.username == ticket.Name && k.user_type_id == p.id && p.type == "Administrator"
                            select k;
                try
                {
                    USER kor = useri.First();

                }
                catch (System.InvalidOperationException)
                {
                    Response.Redirect("/UserPages/Start.aspx");
                }
                if (!Page.IsPostBack)
                {
                    try
                    {
                        USER kor = useri.First();
                        MenuItem apanel = new MenuItem("Admin panel");
                        Menu1.Items.Add(apanel);

                    }
                    catch (System.InvalidOperationException)
                    {
                        return;
                    }
                }
            }
           
        }

        protected void Menu1_MenuItemClick(object sender, MenuEventArgs e)
        {
            switch (e.Item.Text)
            {
                case "Sign out":
                    FormsAuthentication.SignOut();
                    Response.Redirect("/Default.aspx");
                    break;
                case "Dodaj novost":
                    Response.Redirect("/UserPages/AddNews.aspx");
                    break;
                case "Pretraga":
                    Response.Redirect("/UserPages/Search.aspx");
                    break;
                case "Admin panel":
                    Response.Redirect("/UserPages/AdminPanel.aspx");
                    break;
                case "File upload":
                    Response.Redirect("/UserPages/FileUpload.aspx");
                    break;
                case "File download":
                    Response.Redirect("/UserPages/FileDownload.aspx");
                    break;
                case "Upload prezentacije":
                    Response.Redirect("/UserPages/PresentationUpload.aspx");
                    break;
                case "Pregled prezentacije":
                    Response.Redirect("/UserPages/PresentationView.aspx");
                    break;
                case "Pregledaj profil":
                    Response.Redirect("/UserPages/ProfileView.aspx");
                    break;
                case "Edituj profil":
                    Response.Redirect("/UserPages/ProfileEdit.aspx");
                    break;
            }
        }

        protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                e.Row.Cells[3].CssClass = "hiddencol";
            }
            else if (e.Row.RowType == DataControlRowType.Header)
            {
                e.Row.Cells[3].CssClass = "hiddencol";
            }

        }

        protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            try
            {
                GridViewRow red = GridView1.Rows[e.RowIndex];
                String uname = red.Cells[2].Text;
                USER kor = cmsdb.USERs.Single(k => k.username == uname);
                cmsdb.COMMENTs.DeleteAllOnSubmit(kor.COMMENTs);
                cmsdb.SubmitChanges();
                int temp = kor.NEWs.Count;
                for (int i = 0; i < temp; i++)
                {   // prvo treba obrisati sve komentare na novosti u odredjenoj kategoriji
                    cmsdb.COMMENTs.DeleteAllOnSubmit(kor.NEWs.ElementAt(i).COMMENTs);
                }
                cmsdb.NEWs.DeleteAllOnSubmit(kor.NEWs);
                cmsdb.USER_OPTIONs.DeleteOnSubmit(kor.USER_OPTION);
                cmsdb.FILEs.DeleteAllOnSubmit(kor.FILEs);
                cmsdb.SubmitChanges();
            }
            catch (Exception ex)
            {
                Response.Write(ex.Message);
            }
        }

        protected void btnIzbrisiKategorijuF_Click(object sender, EventArgs e)
        {
            String katIme = "";
            try
            {   // uzmi ime kategorije koju treba izbrisati
                katIme = DropKategorija.SelectedItem.ToString();
            }
            catch (NullReferenceException)
            {   // ako nema nista u drop down listi onda nema kategorija u bazi
                Response.Write("Nema kategorija");
            }
            try
            {   // pokupi odabranu kategoriju
                CATEGORY kategorija = cmsdb.CATEGORies.Single(k => k.name == katIme);
                
                cmsdb.FILEs.DeleteAllOnSubmit(kategorija.FILEs);
                //sada se brise kategorija koja je odabrana
                cmsdb.CATEGORies.DeleteOnSubmit(kategorija);
                cmsdb.SubmitChanges();
                DropKategorija.SelectedItem.Text = "";
            }
            catch (Exception izuzetak)
            { 
                Response.Write(izuzetak.Message);
            }
            //refreshaj listu kategorija
            DropKategorija.DataBind();
        }

        protected void btnIzbrisiKategorijuN_Click(object sender, EventArgs e)
        {
            String katIme = "";
            try
            {   // uzmi ime kategorije koju treba izbrisati
                katIme = DropKategorija0.SelectedItem.ToString();
            }
            catch (NullReferenceException)
            {   // ako nema nista u drop down listi onda nema kategorija u bazi
                Response.Write("Nema kategorija");
            }
            try
            {   // pokupi odabranu kategoriju
                CATEGORY kategorija = cmsdb.CATEGORies.Single(k => k.name == katIme);
                int temp = kategorija.NEWs.Count;
                // obrisi kategoriju
                for (int i = 0; i < temp; i++)
                {   // prvo treba obrisati sve komentare na novosti u odredjenoj kategoriji
                    cmsdb.COMMENTs.DeleteAllOnSubmit(kategorija.NEWs.ElementAt(i).COMMENTs);
                }
                //zatim treba obrisati sve novosti u kategoriji
                cmsdb.NEWs.DeleteAllOnSubmit(kategorija.NEWs);
                //sada se brise kategorija koja je odabrana
                cmsdb.CATEGORies.DeleteOnSubmit(kategorija);
                cmsdb.SubmitChanges();
                DropKategorija0.SelectedItem.Text = "";
            }
            catch (Exception izuzetak)
            {
                Response.Write(izuzetak.Message);
            }
            //refreshaj listu kategorija
            DropKategorija0.DataBind();
        }

        protected void DodajFKategoriju_Click(object sender, EventArgs e)
        {
            try
            {   // provjeri da li kategorija koja se dodaje vec postoji
                cmsdb.CATEGORies.Single(k => k.name == NazivFKategorije.Text && k.type == "file");
            }
            catch (InvalidOperationException)
            {
                //ako ne postoji 
                if (NazivFKategorije.Text == "")
                {   //ne moze se dodati kategorija sa praznim imenom
                    Response.Write(" Ne može se dodati kategorija bez imena");
                    return;
                }
                //napravi kategoriju dodaj je u bazu i javi korisniku preko labele sta se desilo
                CATEGORY kategorija = new CATEGORY();

                kategorija.name = NazivFKategorije.Text;
                kategorija.type = "file";
                cmsdb.CATEGORies.InsertOnSubmit(kategorija);
                cmsdb.SubmitChanges();
               
                NazivFKategorije.Text = "";
                DropKategorija.DataBind();
                return;
            }
            NazivFKategorije.Text = "";
        }

        protected void DodajNKategoriju_Click(object sender, EventArgs e)
        {
            try
            {   // provjeri da li kategorija koja se dodaje vec postoji
                cmsdb.CATEGORies.Single(k => k.name == NazivFKategorije.Text && k.type == "news");
            }
            catch (InvalidOperationException)
            {
                //ako ne postoji 
                if (NazivNKategorije.Text == "")
                {   //ne moze se dodati kategorija sa praznim imenom
                    Response.Write(" Ne može se dodati kategorija bez imena");
                    return;
                }
                //napravi kategoriju dodaj je u bazu i javi korisniku preko labele sta se desilo
                CATEGORY kategorija = new CATEGORY();

                kategorija.name = NazivNKategorije.Text;
                kategorija.type = "news";
                cmsdb.CATEGORies.InsertOnSubmit(kategorija);
                cmsdb.SubmitChanges();

                NazivNKategorije.Text = "";
                DropKategorija0.DataBind();
                return;
            }
            NazivNKategorije.Text = "";

        }

        protected void GridView2_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            try
            {
                GridViewRow red = GridView2.Rows[e.RowIndex];
                String nasl = red.Cells[2].Text;
                NEW nov = cmsdb.NEWs.Single(n => n.title == nasl);
                cmsdb.COMMENTs.DeleteAllOnSubmit(nov.COMMENTs);
                cmsdb.NEWs.DeleteOnSubmit(nov);
                cmsdb.SubmitChanges();
                GridView3.DataBind();
            }
            catch (Exception ex)
            {
                Response.Write(ex.Message);
            }
        }

        protected void GridView2_RowCreated(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                e.Row.Cells[2].CssClass = "hiddencol";
                e.Row.Cells[5].CssClass = "hiddencol";
                e.Row.Cells[6].CssClass = "hiddencol";
            }
            else if (e.Row.RowType == DataControlRowType.Header)
            {
                e.Row.Cells[2].CssClass = "hiddencol";
                e.Row.Cells[5].CssClass = "hiddencol";
                e.Row.Cells[6].CssClass = "hiddencol";
            }
        }

        protected void GridView4_RowCreated(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                e.Row.Cells[5].CssClass = "hiddencol";
                e.Row.Cells[6].CssClass = "hiddencol";
            }
            else if (e.Row.RowType == DataControlRowType.Header)
            {
                e.Row.Cells[5].CssClass = "hiddencol";
                e.Row.Cells[6].CssClass = "hiddencol";
            }
        }

    }
}
